/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import empresa.CadastroEmpresa;
import empresa.Empresa;
import empresa.RepositorioEmpresa;
import java.util.List;
import util.CamposObrigatoriosException;
import util.ErroAcessoRepositorioException;

/**
 *
 * @author Alberto
 */
public class ControladorEmpresa {
    
    private RepositorioEmpresa objRepositorioEmpresa;
    
    public ControladorEmpresa(RepositorioEmpresa objRepositorioEmpresa){
        this.objRepositorioEmpresa = objRepositorioEmpresa;
    }
   
    /**
     * Método que ira cadastrar a empresa na base
     * 
     * @param objEmpresa
     * @throws ErroAcessoRepositorioException 
     */
    public void cadastrar(Empresa objEmpresa)  throws ErroAcessoRepositorioException, CamposObrigatoriosException, Exception {
        // Iniciando os Cadastros
        CadastroEmpresa objCadastroEmpresa = new CadastroEmpresa(this.objRepositorioEmpresa);
        
        // casts
        boolean statusEmpresa = (boolean) objEmpresa.getStatusEmpresa();
        
        // Validações
        if(objEmpresa.getCnpj().trim().length() == 0)               throw new CamposObrigatoriosException("CNPJ");
        if(objEmpresa.getDescricaoEmpresa().trim().length() == 0)   throw new CamposObrigatoriosException("Descricao Empresa");
        if(objEmpresa.getFone().trim().length() == 0)               throw new CamposObrigatoriosException("Fone");
        if(objEmpresa.getNomeFantasia().trim().length() == 0)       throw new CamposObrigatoriosException("Nome Fantasia");
        if(objEmpresa.getRasaoSocial().trim().length() == 0)        throw new CamposObrigatoriosException("Razão Social");
        
        String cnpj = objEmpresa.getCnpj();
        cnpj = cnpj.replace(".", "");//onde há ponto coloca espaço  
        cnpj = cnpj.replace("/", "");//onde há barra coloca espaço  
        cnpj = cnpj.replace("-", "");//onde há traço coloca espaço  
        // Setando o Cnpj com apenas números
        objEmpresa.setCnpj(cnpj);
        if(!util.Util.validarCpnj(objEmpresa.getCnpj()))            throw new Exception("Cnpj Invalido");
        
        // Setando os valores
        objEmpresa.setStatusEmpresa(statusEmpresa);
        
        objCadastroEmpresa.cadastrarAtualizar(objEmpresa);
    }
    
    /**
     * Método que ira cadastrar a empresa na base
     * 
     * @param objEmpresa
     * @throws ErroAcessoRepositorioException 
     */
    public void atualizar(Empresa objEmpresa)  throws ErroAcessoRepositorioException, CamposObrigatoriosException, Exception {
        // Iniciando os Cadastros
        CadastroEmpresa objCadastroEmpresa = new CadastroEmpresa(this.objRepositorioEmpresa);
        
        // casts
        int idEmpresa = (int) objEmpresa.getIdEmpresa();
        boolean statusEmpresa = (boolean) objEmpresa.getStatusEmpresa();
        
        // Validações
        if(idEmpresa == 0)                                          throw new CamposObrigatoriosException("Identificador Empresa");
        if(objEmpresa.getCnpj().trim().length() == 0)               throw new CamposObrigatoriosException("CNPJ");
        if(objEmpresa.getDescricaoEmpresa().trim().length() == 0)   throw new CamposObrigatoriosException("Descricao Empresa");
        if(objEmpresa.getFone().trim().length() == 0)               throw new CamposObrigatoriosException("Fone");
        if(objEmpresa.getNomeFantasia().trim().length() == 0)       throw new CamposObrigatoriosException("Nome Fantasia");
        if(objEmpresa.getRasaoSocial().trim().length() == 0)        throw new CamposObrigatoriosException("Razão Social");
        
        String cnpj = objEmpresa.getCnpj();
        cnpj = cnpj.replace(".", "");//onde há ponto coloca espaço  
        cnpj = cnpj.replace("/", "");//onde há barra coloca espaço  
        cnpj = cnpj.replace("-", "");//onde há traço coloca espaço  
        
        // Setando o Cnpj com apenas números
        objEmpresa.setCnpj(cnpj);
        
        if(!util.Util.validarCpnj(objEmpresa.getCnpj()))            throw new Exception("Cnpj Invalido");
        
        // Setando os valores
        objEmpresa.setStatusEmpresa(statusEmpresa);
        objEmpresa.setIdEmpresa(idEmpresa);
        
        // atualizando o objeto na base
        objCadastroEmpresa.cadastrarAtualizar(objEmpresa);
    }
    
    /**
     * Método que ira procurar uma determinada empresa na base
     * @param idEmpresa
     * @return Empresa
     * @throws ErroAcessoRepositorioException 
     */
    public Empresa procurar(int idEmpresa)throws ErroAcessoRepositorioException {
        // Iniciando os Cadastros
        CadastroEmpresa objCadastroEmpresa = new CadastroEmpresa(this.objRepositorioEmpresa);
        
        // casts
        idEmpresa = (int) idEmpresa;
        
        return objCadastroEmpresa.procurar(idEmpresa);
    }
    
    /**
     * Método que ira verificar a existencia de uma empresa na base
     * 
     * @param idEmpresa
     * @return boolean
     * @throws ErroAcessoRepositorioException 
     */
    public boolean existe(int idEmpresa)throws ErroAcessoRepositorioException {
        // Iniciando os Cadastros
        CadastroEmpresa objCadastroEmpresa = new CadastroEmpresa(this.objRepositorioEmpresa);
        
        // casts
        idEmpresa = (int) idEmpresa;
        
        return objCadastroEmpresa.existe(idEmpresa);
    }
    
    /**
     * Método que ira listar as empresa da base
     * 
     * @param strComplemento
     * @return List<Empresa> 
     * @throws ErroAcessoRepositorioException 
     */
    public List<Empresa> listar(String strComplemento)throws ErroAcessoRepositorioException {
        // Iniciando os Cadastros
        CadastroEmpresa objCadastroEmpresa = new CadastroEmpresa(this.objRepositorioEmpresa);
        
        return objCadastroEmpresa.listar(strComplemento);
    }
    
    /**
     * Método que ira remover as empresas da base
     * 
     * @param idEmpresa
     * @throws Exception 
     */
    public void remover(int idEmpresa)throws Exception {
        // Iniciando os Cadastros
        CadastroEmpresa objCadastroEmpresa = new CadastroEmpresa(this.objRepositorioEmpresa);
        
        objCadastroEmpresa.remover(idEmpresa);
    }
   
    public List<Empresa> listarAtivos() throws Exception, ErroAcessoRepositorioException {
        CadastroEmpresa objCadastroEmpresa = new CadastroEmpresa(this.objRepositorioEmpresa);
        
        // retornando o resultado
        return objCadastroEmpresa.listarAtivos();
    }
    
     public List<Empresa> procurarEmpresaPorDescricao(String descricao)throws ErroAcessoRepositorioException, Exception {
        // Iniciando os Cadastros
        CadastroEmpresa objCadastroEmpresa = new CadastroEmpresa(this.objRepositorioEmpresa);
    
                    
        return objCadastroEmpresa.procurarEmpresaPorDescricao(descricao);
    }
}
